#include <iostream>
#include <cstdio>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

void Daemon()
{
    // 1.创建子进程，父进程退出（保证服务器非组长进程）
    if (fork() > 0)
        exit(0);

    // 2.子进程创建新会话
    pid_t id = setsid();

    // 3.修改工作路径（可选做）

    // 4. 处理文件描述符0/1/2，因为守护进程没有关联终端

    // 方法1：重定向文件描述符0/1/2到/dev/null（因为守护进程没有关联终端）
    int fd = open("/dev/null", O_RDWR);
    dup2(fd, 0);
    dup2(fd, 1);
    dup2(fd, 2);
    close(fd);
    
    // 方法2：直接close
    // close(0);
    // close(1);
    // close(2);
}